<?php
/* 
 * Sistema Fácil - Desenvolvimento rápido de softwares baseado em sentenças em português
 * Copyright (C) 2010 Rodrigo Caldeira de Paula Lima 
 * 
 * Este arquivo é parte do Sistema Fácil
 *
 * Sistema Fácil é um software livre; você pode redistribui-lo e/ou 
 * modifica-lo dentro dos termos da Licença Pública Geral GNU como 
 * publicada pela Fundação do Software Livre (FSF); na versão 2 da 
 * Licença, ou (na sua opnião) qualquer versão.
 * 
 * Este programa é distribuido na esperança que possa ser  util, 
 * mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
 * MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
 * Licença Pública Geral GNU para maiores detalhes.
 *
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU
 * junto com este programa, se não, escreva para a Fundação do Software
 * Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 
 * */
class Condicao {
	var $valorEsquerda;
	var $operacao;
	var $valorDireita;
	var $tabela;

	public static function lerCondicoes($tabela, &$arrayCondicoes, $expressaoConfig) {
		$iCondicao = 0;
		$operadoresConfig = array();
		array_push($operadoresConfig, array("for igual a", "=="));
		array_push($operadoresConfig, array("for diferente de", "!="));
		array_push($operadoresConfig, array("for maior que", ">"));
		array_push($operadoresConfig, array("for menor que", "<"));
		array_push($operadoresConfig, array("for menor ou igual a", "<="));
		array_push($operadoresConfig, array("for maior ou igual a", ">="));
		$condicoesOU = preg_split("/(?!(maior)|(menor)) ou (?!(igual a))/", $expressaoConfig);
		foreach ($condicoesOU as $condicaoOU) {
			$arrayCondicoes[$iCondicao] = array();
			$condicoesE = explode(" e ", $condicaoOU);
			foreach ($condicoesE as $condicaoE) {
				$condicao = new Condicao();
				foreach ($operadoresConfig as $operadorConfig) {
					if (strpos($condicaoE, $operadorConfig[0]) !== FALSE) {
						$valorEsquerda = trim(substr($condicaoE, 0, strpos($condicaoE, $operadorConfig[0])));
						$operacao = $operadorConfig[1];
						$valorDireita = trim(substr($condicaoE, strpos($condicaoE, $operadorConfig[0]) + strlen($operadorConfig[0])));
					}
				}
				$condicao->valorEsquerda = $valorEsquerda; 
				$condicao->operacao = $operacao;
				$condicao->valorDireita = $valorDireita;
				$condicao->tabela = $tabela;
				array_push($arrayCondicoes[$iCondicao], $condicao);
			}
			$iCondicao++;
		}
	}
	
	function verificar() {
		$expressao = "";
		$tipoConfig = "";
		$mostrarCampo = "";
		
		foreach ($this->tabela->campos as $campo) {
			if ($campo->nome == $this->valorEsquerda) {
				$expressao .= $campo->valor;
				$tipoConfig = $campo->tipoConfig;
				$mostrarCampo = $campo->mostrarCampo;
				break;
			}
		}
		
		$expressao .= $this->operacao;
		
		if (strpos($this->valorDireita, "'") !== FALSE || is_numeric($this->valorDireita)) {
			$valorDireita = $this->valorDireita;
		} else {
			foreach ($this->tabela->campos as $campo) {
				if ($campo->nome == $this->valorDireita) {
					$valorDireita = $campo->valor;
				}
			}
		}
		
		switch ($tipoConfig) {
			case "Texto":
			case "Senha":
			case "Texto Grande":
			case "Número":
			case "Número Decimal":
			case "Data":
			case "Expressão Numérica":
				$expressao .= $valorDireita;
				break;
			case "Sim ou Não":
				if ($this->valorDireita == "Sim") {
					$expressao .= "1";
				} else {
					$expressao .= "0";
				}
				break;
			default:
				$query = "SELECT id FROM `" . $tipoConfig . "` WHERE `" . $mostrarCampo . "`=" . $valorDireita;
				//echo $query;
				if ($result = mysql_query($query, $this->tabela->configBase->conn)) {
					if (mysql_num_rows($result) > 0) {
						$expressao .= mysql_result($result, 0);
					} else {
						$expressao .= "0";
					}
				}
				break;
		}
		$resultado = false;
		//echo $expressao;
		@eval("\$resultado = ($expressao);");
		return $resultado;
	}
}
?>